package com.server.db;
import java.sql.Connection;
import java.sql.SQLException;

import com.jolbox.bonecp.BoneCP;
import com.jolbox.bonecp.BoneCPConfig;
import com.server.tools.GameConfig;

/**
 * DBCP配置类
 * @author SUN
 */
public class DBPool {
	private static BoneCPConfig cpConfig;
    private static BoneCP dataSource;
    
    //加载DBCP配置文件
    static{
    	cpConfig = new BoneCPConfig();
    	// 相应驱动的jdbcUrl
    	cpConfig.setJdbcUrl(GameConfig.jdbcUrl);
        // 数据库的用户名
    	cpConfig.setUsername(GameConfig.jdbcUsername);
        // 数据库的密码
    	cpConfig.setPassword(GameConfig.jdbcPassword);

    	//设置分区个数.这个参数默认为1,建议3-4（根据特定应用程序而定）
    	cpConfig.setPartitionCount(3);
        // 检查数据库连接池中空闲连接的间隔时间，单位是分，默认值：240，如果要取消则设置为0
    	cpConfig.setIdleConnectionTestPeriodInMinutes(60);
        // 连接池中未使用的链接最大存活时间，单位是分，默认值：60，如果要永远存活设置为0
    	cpConfig.setIdleMaxAgeInMinutes(30);
        // 每个分区最大的连接数
    	cpConfig.setMaxConnectionsPerPartition(50);
        // 每个分区最小的连接数    
    	cpConfig.setMinConnectionsPerPartition(5);
    	//设置分区中的连接增长数量.这个参数默认为1
    	cpConfig.setAcquireIncrement(5);
    	//连接池最大连接时间
    	cpConfig.setMaxConnectionAgeInSeconds(5);
    	//数据库中最大连接保持时间
    	cpConfig.setConnectionTimeoutInMs(600000);
    	try {
			dataSource = new BoneCP(cpConfig);
		} catch (SQLException e) {
			e.printStackTrace();
		}
    }
    //从连接池中获取一个连接
    public static Connection getConnection(){
        Connection connection = null;
        try{
            connection = dataSource.getConnection();
        }catch(SQLException e){
            e.printStackTrace();
        }
        try {
            connection.setAutoCommit(false);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return connection;
    }
    public static void main(String[] args) {
        getConnection();
    }
}